/*   
 * Copyright (c) 2010-2020 DMGIS Ltd. All Rights Reserved.   
 *   
 * This software is the confidential and proprietary information of   
 * DMGIS. You shall not disclose such Confidential Information   
 * and shall use it only in accordance with the terms of the agreements   
 * you entered into with DMGIS.   
 *   
 */     
package com.dmgis.qxfw.dataservice.businessservice.qxinfo.service;


import com.dmgis.entity.DmMapRectangle;
import com.dmgis.qxfw.dataservice.businessservice.api.entity.qx.*;
import com.dmgis.qxfw.dataservice.businessservice.api.entity.yj.job_model;
import com.dmgis.qxfw.dataservice.businessservice.api.entity.yj.village;
import com.dmgis.qxfw.dataservice.businessservice.api.entity.yj.warning;
import com.dmgis.qxfw.dataservice.businessservice.api.entity.zy.base_product;
import com.dmgis.qxfw.dataservice.businessservice.api.entity.zy.thunder_fcst;
import com.dmgis.qxfw.dataservice.businessservice.common.domain.ActualElemQuery;
import com.dmgis.qxfw.dataservice.businessservice.common.domain.RadarSearch;
import com.dmgis.qxfw.dataservice.businessservice.common.domain.SateSearch;
import com.dmgis.qxfw.dataservice.businessservice.common.entity.*;
import com.dmgis.qxfw.dataservice.businessservice.qxinfo.pojo.WeatherVo;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * This class is used for 气象信息展示接口   
 * @author dsq 
 * @version   
 *       1.0, 2018年10月28日 下午12:31:47   
 */  
public interface IQxInfoService {
	/**
	 * 获取城市预报数据
	 * 
	 * @param newestDate
	 * @return
	 * @author dsq
	 * @date 2018年6月29日
	 */
	List<ForecastInfo> getCityFcst(TownshipForecastKey newestDate);

	/**
	 * 获取乡镇预报最新时间
	 * 
	 * @return
	 * @author dsq
	 * @date 2018年6月29日
	 */
	TownshipForecastKey getTownNewDate();

	/**
	 * 获取城镇预报最新时间
	 */
	collectTime getCityNewDate();

	/**
	 * 获取乡镇预报数据
	 * 
	 * @param newestDate
	 * @return
	 * @author dsq
	 * @date 2018年6月29日
	 */
	List<TownshipForecast> getTownshipFcst(TownshipForecastKey newestDate, String county);

	/**
	 * 获取雷达图最新时间
	 * 
	 * @return
	 * @author dsq
	 * @date 2018年7月6日
	 */
	DopplerKey getRadarNewestDate();

	/**
	 * 获取雷达图参数信息
	 * 
	 * @return
	 * @author dsq
	 * @date 2018年7月6日
	 */
	List<DopplerKey> getRadarTypes(Date doppleTime);

	/**
	 * 获取雷达图信息
	 * 
	 * @param
	 * @return
	 * @author dsq
	 * @date 2018年7月6日
	 */
	List<Doppler> getRadarInfo(RadarSearch radarSearch);
	
	/**  
	 * 获取最新云图时间
	 * @return  
	 * @author dsq
	 * @date 2018年7月9日
	 */   
	SatelliteNephoramKey getSateNewestDate();
	/**  
	 * 获取云图类型
	 * @return  
	 * @author dsq
	 * @date 2018年7月9日
	 */   
	List<String> getSateTypes();
	
	/**  
	 * 获取云图信息
	 * @param sateSearch
	 * @return  
	 * @author dsq
	 * @date 2018年7月9日
	 */   
	List<SatelliteNephoram> getSateInfo(SateSearch sateSearch);
	
	/**  
	 * 获取最新实况数据
	 * @return  
	 * @author dsq
	 * @date 2018年7月10日
	 */
	collectTime getScaleNewDate(String type);
	
	/**  
	 * 气象要素查询
	 * @param elemQuery
	 * @return  
	 * @author dsq
	 * @date 2018年7月11日
	 */   
	List<ActualData> qxElementQuery(ActualElemQuery elemQuery);

	/**
	 * 获取水库流量信息
	 * @param
	 * @return
	 * @author dsq
	 * @date 2018年7月9日
	 */
	List<water_station> getShuiKuInfo();

	/*查询时间段内的预警信息号*/
	List<warning> getWarningInfo(String startDate, String endDate, int i);

	/*雷电最新时间*/
	thunder_fcst getLDNewDate();

	/*雷电潜势预报查询*/
	List<thunder_fcst> getThunderFcst(String time, String sc, String sx);

	/*查询全部预警信号*/
	List<warning> getWarningType(String startDate, String endDate);

	/*获取气象预警文档*/
	String getQxWarnDoc(String docpath);

	/*初始化指导预报*/
	shitai_text getZhiDaoNewDate();

	/*查询指导预报*/
	List<shitai_text> getZhiDaoInfo(String startDate, String endDate);
	
	/*区域站点*/
	List<smallscale_station> getStations(DmMapRectangle rect);

	/*获取预警区内实况*/
	List<msgmediumsmallscale> getSKinfo(String startDate, String endDate, List<String> stationids);
	
	/*乡镇站点*/
	List<township_station> getYBStations(DmMapRectangle rect);

	/*获取预警区内实况*/
	List<township_forecasttemp> getYBinfo(List<String> stationids);

	//村点
	List<village> getCountryPoint(DmMapRectangle rect);

	//雷电潜势预报
	List<base_product> showLDDoc(String cpName);

	//获得区县
	List<township_forecasttemp> getCityStation();

	//获得雷电文档时间
	base_product initWdPage();

	//雷电潜势文档
	List<base_product> getLdWord(String startDate, String endDate);

	//预警信号
	List<warning> getWarnInfo();

	/**
	 * 获取三天预报
	 * @param selectKey
	 * @return
	 */
    List<ForecastInfo> getThreeDayCityFcst(TownshipForecastKey selectKey);



	Doppler getRadarMosaicNewestDate();

	List<Doppler> getRadarMosaicTypes();

	List<Doppler> getRadarMosaicInfo(RadarSearch radarSearch);

	//根据气象站编号 获取气象站对象

	/**
	 *
	 * @param countys 气象站编号 List<String>
	 * @param startDate 开始时间 String
	 * @param endDate 结束时间 String
	 * @return
	 */
	List<WeatherVo> getWeatherByCondition(List<String> countys, String startDate, String endDate);

	/***
	 * 得到最近站点未来三天天气预报
	 * @param selectKey
	 * @param lon
	 * @param lat
	 * @return
	 */
	List<TownshipForecast> getNearStaThreeForecast(TownshipForecastKey selectKey, String lon, String lat);

	/****
	 * 获得最近站点最新的实况信息
	 * @param lon
	 * @param lat
	 * @return
	 */
	String getStationid(String lon, String lat);

	/***
	 * 获取水库或水电站坐标
	 * @return
	 */
    List<String> getReservoirLonlat(String staName);

	/***
	 * 获取水库或水电站坐标
	 * @return
	 */
	List<String> getwatereleLonlat(String staName);

	/***
	 *  初始化QPF
	 * @return
	 */
	List<String> initQpfPage(String ntimes);

	/***
	 * 预报  七张图
	 * @return
	 */
	String getForecastTimeInfo();

	/***
	 * 获取雷达图  最新十张
	 * @param request
	 * @return
	 */
	Object GetTenDoppler(HttpServletRequest request);

/**
	 * 预警最新5张图
	 * @param id
	 * @return
	 */
	List<warning> getFiveNewestWarning(int id);

	raidentemp getLDDate();

	Date getScaleDate();

	List<ActualData> qxEltQuery(ActualElemQuery elemQuery);

	/**
	 * 采集时间
	 * @param type 类型
	 * @return
	 */
    Object getCollectTimeByType(String type);

	/**
	 * 采集日志
	 * @param startDate
	 *  @param endDate
	 * @param type 类型
	 * @return
	 */
	Object getCollectLogByTimeNType( Date startDate,Date endDate, String type);

	/**
	 * 等值分级
	 * @param elementType
	 * @return
	 */
	Object getContourSettingByType(String elementType);


	/**
	 * 干旱检测
	 * @param startDate
	 * @param endDate
	 * @param stationid
	 * @return
	 */
	Object getDroughtCIByTime(Date startDate,Date endDate, String stationid);

	/**
	 * 城镇预报
	 * @param forecastInfo
	 * @return
	 */
	List<ForecastInfo> getCityForecastByTimeNArea(ForecastInfo forecastInfo);

	/**
	 * 全国城镇预报
	 * @param forecastInfo
	 * @return
	 */
	List<ForecastInfo> getCountryCityForecastByTimeNArea(ForecastInfo forecastInfo);

	/**
	 * 自动站
	 * @param elemQuery
	 * @return
	 */
	Object getSmallScaleByTimeNArea(ActualElemQuery elemQuery);

	/**
	 * 自动站
	 * @param elemQuery
	 * @return
	 */
	Object getSmallScaleByTimeNStationIds(ActualElemQuery elemQuery);

	/**
	 * 闪电定位
	 * @param elemQuery
	 * @return
	 */
	Object getRaidenByTimeNArea(ActualElemQuery elemQuery);

	/**
	 * 闪电定为
	 * @param elemQuery
	 * @return
	 */
	Object getRaidenByTimeNLonLat(ActualElemQuery elemQuery);

	/**
	 * 水库水情
	 * @param reservoirWaterInfo
	 * @return
	 */
	Object getReservoirWaterInfoByTimeNArea(Date startDate,Date endDate,reservoirWaterInfo reservoirWaterInfo);

	/**
	 * 水库水情
	 * @param actualElemQuery
	 * @return
	 */
	Object getReservoirWaterInfoByTimeNStationIds(ActualElemQuery actualElemQuery);

	/**
	 * 河道水情
	 * @param
	 * @param addvcd
	 * @return
	 */
	Object getRiverWaterInfoByTimeNArea(Date startDate,Date endDate, String addvcd);

	/**
	 * 河道水情
	 * @param
	 * @param stations
	 * @return
	 */
	Object getRiverWaterInfoByTimeNStationIds(Date startDate,Date endDate, String[] stations);

	/**
	 * 山洪水情
	 * @param
	 * @param addvcd
	 * @return
	 */
	Object getWaterRainInfoByTimeNArea(Date startDate,Date endDate, String addvcd);

	/**
	 * 山洪水情
	 * @param
	 * @param stations
	 * @return
	 */
	Object getWaterRainInfoByTimeNStationIds(Date startDate,Date endDate, String[] stations);

	/**
	 * 土壤湿度
	 * @param stationid
	 * @return
	 */
	Object getSoilHumidityByTimeNStationids(Date startDate,Date endDate, String stationid);

	/**
	 * 日历史数据
	 * @param stationid 站号
	 * @param element 要素
	 * @return
	 */
	Object getHistoryDayDataByTimeNStationIds( String startDate,String endDate, String stationid, String element);

	/**
	 * 月历史数据
	 * @param stationid
	 * @param element
	 * @return
	 */
	Object getHistoryMonthDataByTimeNStationIds(String startDate,String endDate, String stationid, String element);

	/**
	 * 年历史数据
	 * @param stationid
	 * @param element
	 * @return
	 */
	Object getHistoryYearDataByTimeNStationIds(String startDate,String endDate, String stationid, String element);

	/**
	 * 乡镇预报
	 * @param townshipForecast
	 * @return
	 */
	List<township_forecast> getTownForecastByTimeNArea(township_forecast townshipForecast);

	/**
	 * 乡镇预报
	 * @param townshipForecast
	 * @return
	 */
	List<township_forecast> getTownForecastByTimeNStationids(township_forecast townshipForecast);

	/**
	 * 预警信号
	 * @param area
	 * @param city
	 * @return
	 */
	Object getWarnSignalByTimeNArea(Date startDate,Date endDate, String area, String city);

	/**
	 * 组网雷达
	 * @param datechar
	 * @param timechar
	 * @param ldtype
	 * @return
	 */
	Object getUnionRadarByTimeNType(Date datechar, String timechar, String ldtype);

	/**
	 * 云图文件
	 * @param datechar
	 * @param timechar
	 * @param yttype
	 * @return
	 */
	List<satellitenephoram> getFYInfo(Date datechar, String timechar, String yttype);

	/**
	 * 指数气象
	 * @param zhiShu
	 * @return
	 */
	Object getZhishu(zhiShu zhiShu);




	/**
	 * 雷达文件图
	 * @param request
	 * @return
	 * @throws ParseException
	 */
	List<doppler> getDopplerImage1(HttpServletRequest request) throws ParseException;


	/**
	 * 获取云图
	 * @param request
	 * @return
	 */
	List<satellitenephoram> getFYImages1(HttpServletRequest request) throws ParseException;

    Object getSmallScaleByDistince(Date newTime, String lon, String lat);

	/**
	 * 获取最新实况数据
	 * @return
	 * @author dsq
	 * @date 2018年7月10日
	 */
	Date getScaleNewDate();

	String getJXHTimeChar(String date);

    List<msgmediumsmallscale> tempQuery();

    List<job_model> InitProType();

    List<?> queryZhcxZhdXq(String wybh);

	Object getHistoryByElement(String element, String date, String county, String result,String advname);

	List<sum_rain_day_data> getQiHouByTemp(String result);

	List<sum_rain_day_data> getQiHouByTemp1(String result);

	List<sum_rain_day_data> getQiHouByTemp2(String result);

	List<sum_rain_day_data> getQiHouByRain(String result);

	List<sum_rain_day_data> getQiHouByRain1(String result);

	List<sum_rain_day_data> getQiHouByTemp6(String result);

	List<sum_rain_day_data> getQiHouByTemp7(String result);

	List<sum_rain_day_data> getQiHouByTemp8(String result);

	List<sum_rain_day_data> getQiHouByTemp9(String result);

	List<sum_rain_day_data> getQiHouByTemp10(String result);

	Object getQxFwDoc() throws SQLException, IOException, ClassNotFoundException;

	Object getRainByMonth(int month,String stationId);

	Object getTempByMonth(int month,String stationId);

    Object getWindByMonth(int month,String stationId);

	List<sum_rain_day_data> getQiHouByRain2(String result);

	List<sum_rain_day_data> getQiHouByTemp11(String result);

	List<Doppler> getNewRadarInfo(RadarSearch radarSearch);

	List<SatelliteNephoram> getYtInfo(SateSearch sateSearch);

	List<sum_rain_day_data> getQiHouByRain11(String result);
}
  